package com.qf.utils;


import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

@Component
public class UplodUtils {

    @Value("${qiniu.accessKey}")
    public String ak;

    @Value("${qiniu.secretKey}")
    public String sk;
    @Value("${qiniu.bucket}")
    public String bucket;
    @Value("${qiniu.url}")
    public String url;

   public String upload(MultipartFile multipartFile){
//        //构造一个带指定 Region 对象的配置类
       Configuration cfg = new Configuration(Region.region1());
////...其他参数参考类注释
       UploadManager uploadManager = new UploadManager(cfg);
////...生成上传凭证，然后准备上传
//
////默认不指定key的情况下，以文件内容的hash值作为文件名
       String key = null;
       try {
           byte[] uploadBytes = multipartFile.getBytes();
           ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);
            Auth auth = Auth.create(ak, sk);
            String upToken = auth.uploadToken(bucket);
          try {
               Response response = uploadManager.put(byteInputStream,key,upToken,null, null);
               //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
               return url+putRet.hash;
                } catch (QiniuException ex) {
            Response r = ex.response;
               System.err.println(r.toString());
                try {
                System.err.println(r.bodyString());
              } catch (
    QiniuException ex2) {
                  //ignore
              }
          }
        } catch (UnsupportedEncodingException ex) {
            //ignore
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
  }
}
